import com.sun.xml.internal.ws.addressing.WsaActionUtil;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lenovo
 * Date: 2022-05-03
 * Time: 10:47
 */
public class TestDemo {
    //递归求 N 的阶乘
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//输入你要求的阶乘 n=5
        int ret = fac(n);
        System.out.println(ret);
    }
    public static int fac(int n){
        if(n == 1){//初始条件
            return  1;
        }else {
            return n*fac(n-1);//递推公式：当n=2时，return: 2*1=2
        }
    }















    //递归求 1 + 2 + 3 + ... + 10
    public static void main6(String[] args) {
        int n = 10;
        int ret = add(n);
        System.out.println(ret);
    }
    public static int add(int n){
        if(n==1){//起始条件
            return 1;
        }else{
            return n+add(n-1);//递推公式 当n=2时，return 2+1 =3
        }
    }

















    //写一个递归方法，输入一个非负整数，返回组成它的数字之和
    // 1234=1+2+3+4=10
    public static void main5(String[] args) {
        int n = 1234;
        int ret = seadd(n);
        System.out.println(ret);
    }
    public static int seadd(int n){
        if(n<10){//起始条件
            return n;//直接返回n的值
        }else{
            return n%10+seadd(n/10);//递推公式 假设n=12 则这里返回的值：12%10+1=3
        }
    }











    //写一个递归方法，输入一个非负整数，返回组成它的数字之和
    // 1921
    public static void main4(String[] args) {
        int year = 1921;
        print(year);
    }
    public static void print(int n){
        if(n < 10){
            System.out.print(n+" ");
        }else{
            print(n/10);
            System.out.print(n%10+" ");
        }
    }








    //汉诺塔
    public static void main3(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();//输入你要移动的盘子数 n=3
        hanoi(n,'X','Y','Z');
    }
    //移动
    public static void move(char pos1,char pos2){
        System.out.println(pos1+"->"+pos2);
    }
    public static void hanoi(int n,char pos1,char pos2,char pos3){
        if(n==1){//只有1个盘子
            move(pos1,pos3);//直接x->z
        }else{
            hanoi(n-1,pos1,pos3,pos2);//将n-1个盘子借助Z移到Y上
            move(pos1,pos3);//将剩下的1个盘子从X移到Z上
            hanoi(n-1,pos2,pos1,pos3);//将Y上的n-1个盘子再移到Z上
        }
    }
        //循环实现斐波那契数列
    // 1 1 2 3 5 8 13 21 34 55 89
        public static void main2(String[] args) {
            int f1 = 1;
            int f2 = 1;
            int fn = 0;
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();//输入n=8
            while (n>2){
                fn = f1+f2;
                f1 = f2;
                f2 = fn;
                n--;
            }
            System.out.println(fn);
        }

    //递归实现斐波那契数列
    public static void main1(String[] args) {
        int n = 39;
        int ret = fab(n);
        System.out.println(ret);
        System.out.println("n=3被计算的次数"+count);
    }
    public static int count = 0;
    public static int fab(int n){
        if(n == 1|| n == 2){
            return 1;
        }else {
            if(n == 3){
                count++;
            }
            return fab(n-1)+fab(n-2);
        }
    }
}
